
const mongoose = require('mongoose');
// console.log(mongoose);


// 连接数据库 -> demo
mongoose.connect("mongodb://localhost:27017/demo", {useNewUrlParser:true,useUnifiedTopology:true })
// mongoose.set('strictQuery',false)


// 这种也可以看数据库是否连接成功
mongoose.connection.on('connected', () => console.log('数据库连接成功'));
mongoose.connection.on('error', () => console.log('数据库连接异常'));
mongoose.connection.on('disconnectied', () => console.log('数据库连接断开'));



// 定义 Schema(模板)
// a. 在 Mongoose 中，所有数据都由一个 Schema 开始创建。

// b. 每一个 schema 都映射到一个 Mongodb 的集合(collection)，并定义了该集合(collection)中的文档(document)的形式。

// c. 相当于声明表结构信息，不能操作数据库

var Schema = mongoose.Schema;

var UserSchema = new Schema({
    name:String,
    age:{
        type:Number,
        require:true,
        min:0,
        max:1000,
        default:0,
    },
    height:{
        type:Number,
        require:true,
    },
    weight:{
        type:Number,
        require:true,
    },
    hobby:{
        type:Array,
        default:[]
    }
})

// 创建 Model(模型)  -> 链接表(集合  -> 没有就新增)

var model = mongoose.model;

var User = model("user",UserSchema); 


//  通过模型(User)对数据库进行增删改查

var list = [
    { "name" : "小红", "age" : 15, "height" : 169, "weight" : 51, "hobby" : [ "听歌", "追番", "漫画" ] },
    { "name" : "李四", "age" : 27, "height" : 182, "weight" : 72, "hobby" : [ "唱歌", "跳舞" ] },
    { "name" : "张三", "age" : 25, "height" : 175, "weight" : 65, "hobby" : [ "唱歌", "Rap" ] },
    { "name" : "刀刀", "age" : 18, "height" : 171, "weight" : 60, "hobby" : [ "嗨歌", "看小说" ] },
    { "name" : "小刀", "age" : 15, "weight" : 50, "height" : 165 }
]


// User.create(list,function(err,doc){
//     if(err) throw err;
//     console.log("新增成功",doc)
// })

// User.create(list).then(doc=>{
//     console.log("新增成功",doc)
// }).catch(err=>{
//     console.log("出现错误",err);
// })


// User.insertMany({})
// User.insertMany([{}])   新增多条


// User.find({},{__v:0},function(err,list){
//     if(err) throw err;
//     console.log("查询成功",list);
// })

// User.find({},{__v:0}).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })



// User.find({name:"张三"},{__v:0}).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// User.find({age:{$gte:20,$lte:30}},{__v:0}).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// User.find({name:/小/i},{__v:0}).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// "63b8e4cdbcd7079dbe5fb1c4"  -> ObjectId("63b8e4cdbcd7079dbe5fb1c4")
// User.findById("63b8e4cdbcd7079dbe5fb1c4").then(doc=>{
//     console.log("查询成功",doc);
// })

// 等价于  
// var ObjectId = mongoose.Types.ObjectId;    //获取ObjectId 
// User.findOne({_id: ObjectId("63b8e4cdbcd7079dbe5fb1c4")}).then(doc=>{
//     console.log("查询成功",doc);
// })

// findById() + xxx 的衍生方法

// findByIdAndDelete()
// findByIdAndRemove()  根据id删除数据 返回被删除的数据(doc)
// User.findByIdAndDelete("63b8e4cdbcd7079dbe5fb1c4").then(doc=>{
//     console.log("删除成功",doc);  
// })

// findByIdAndUpdate()  根据id删除数据 返回原本的数据(doc)
// User.findByIdAndUpdate("63b8e4cdbcd7079dbe5fb1c2",{$inc:{age:1}}).then(doc=>{
//     console.log("更新成功",doc);  
// })

// User.findByIdAndUpdate("63b8e4cdbcd7079dbe5fb1c2",{$set:{height:170}}).then(doc=>{
//     console.log("更新成功",doc);  
// })

// User.findByIdAndUpdate("63b8e4cdbcd7079dbe5fb1c2",{height:175}).then(doc=>{
//     console.log("更新成功",doc);  
// })


// User.findOneAndDelete({id:"63b8e4cdbcd7079dbe5fb1c2"}).then(doc=>{
//     console.log("删除成功",doc);
// })


// User.findOneAndUpdate({name:"李四"},{name:"李肆"}).then(doc=>{
//     console.log("更新成功",doc);
// })


// User.findOneAndReplace({name:"李肆"},{name:"李思"}).then(doc=>{
//     console.log("更新成功",doc);
// })

// ---------------------------find的相关方法----------------------------
// find().count()
// find().sort()
// find().skip()
// find().limit()

// User.find({},{__v:0}).count().then(total=>{
//     console.log(1111,total);
// }).catch(err=>{
//     console.log(2222,err);
// })

// User.find({},{__v:0}).sort({age:1}).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// 1-3
// User.find({},{__v:0}).sort({age:1}).limit(3).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// 4-6
// User.find({},{__v:0}).sort({age:1}).skip(3).limit(3).then(list=>{
//     console.log(1111,list);
// }).catch(err=>{
//     console.log(2222,err);
// })

// User.find().where("name").equals("张三").then(list=>{
//         console.log(1111,list);
//     }).catch(err=>{
//         console.log(2222,err);
//     })




// User.deleteOne()
// User.deleteMany()





